Colin Walters [Thu, 29 Nov 2012 23:16:45 +0000 (18:16 -0500)]
Update to the latest libgsystem
Colin Walters [Thu, 29 Nov 2012 22:11:24 +0000 (17:11 -0500)]
Switch to using libgsystem shutil
More code moved into libgsystem.
Colin Walters [Thu, 29 Nov 2012 21:58:39 +0000 (16:58 -0500)]
Switch to libgsystem file reading API
More draining common utilities into libgsystem.
Colin Walters [Thu, 29 Nov 2012 21:40:17 +0000 (16:40 -0500)]
Switch to libgsystem directory creation API
More code being dropped into a common place.
Colin Walters [Thu, 29 Nov 2012 21:28:24 +0000 (16:28 -0500)]
otutil: Move checksum related bits into checksum-utils.[ch]
This paves the way for slimming ot-gio-utils.[ch] into libgsystem.
Colin Walters [Thu, 29 Nov 2012 21:24:49 +0000 (16:24 -0500)]
Drop some bits from libotutil that are now merged in libgsystem
Colin Walters [Thu, 29 Nov 2012 20:56:17 +0000 (15:56 -0500)]
libotutil: Drop dead prototype
Was never implemented.
Colin Walters [Wed, 21 Nov 2012 17:38:29 +0000 (12:38 -0500)]
deploy: With --no-kernel, do copy host kernel modules
This is used by the qemu scripts, and there we *do* need the kernel
modules inside the target system.
Colin Walters [Mon, 19 Nov 2012 16:35:30 +0000 (11:35 -0500)]
pull-local: Make multithreaded
We were blocking for easily 1/10 or 1/5 of a second in fdatasync(),
which drastically slows down the whole process.
This threading isn't quite as good as the ostree-pull command, but it
lets us avoid the dependency on libsoup everywhere, and it's simpler.
Colin Walters [Sun, 18 Nov 2012 20:44:21 +0000 (15:44 -0500)]
core: Drop old GLIB_CHECK_VERSION(2.32) bits
We hard require 2.34 now; if it doesn't exist on the system, that's
what embedded dependencies are for.
Colin Walters [Fri, 16 Nov 2012 22:41:46 +0000 (17:41 -0500)]
admin prune: New builtin for cleaning up deployments and repo
After a while of pull-deploy cycles, you start to accumulate a lot of
them. While the deployment read-only part is hardlinked, the -etc
space adds up.
Additionally, the repository itself just gets large.
The new command "ostree admin prune" deletes everything except the
"current" and "previous" deployments.
Colin Walters [Fri, 16 Nov 2012 22:14:23 +0000 (17:14 -0500)]
deploy: Write refs into repo for current/previous deployments
We don't want this data to be gc'd by default by a prune.
Colin Walters [Fri, 16 Nov 2012 20:45:05 +0000 (15:45 -0500)]
prune: Report how much disk space we freed
Just nicer to see...
Colin Walters [Fri, 16 Nov 2012 17:26:29 +0000 (12:26 -0500)]
prune: Add option to traverse refs only
The previous code (unintentionally) only traversed from refs; so data
only reachable from previous commits would be deleted. That shouldn't
be the default, but we do want to offer it as an option.
So add a --refs-only option.
Colin Walters [Fri, 16 Nov 2012 17:10:21 +0000 (12:10 -0500)]
traverse: Skip already traversed commits
This is just more efficient, since e.g. "ostree prune" may invoke
ostree_traverse_commit() multiple times for the same commit.
Colin Walters [Fri, 16 Nov 2012 15:58:35 +0000 (10:58 -0500)]
prune: Default to deleting loose objects, code cleanup
We're getting closer to matching 'git gc'.
Colin Walters [Fri, 16 Nov 2012 15:40:49 +0000 (10:40 -0500)]
admin: code cleanup
Refactor internal functions so they can be used by a later patch.
Colin Walters [Fri, 16 Nov 2012 15:11:39 +0000 (10:11 -0500)]
ostree.spec.in: Update from Fedora review comments
See https://bugzilla.redhat.com/show_bug.cgi?id=819951
Colin Walters [Thu, 1 Nov 2012 02:02:35 +0000 (22:02 -0400)]
Release 2012.12
Jasper St. Pierre [Wed, 22 Aug 2012 08:58:17 +0000 (05:58 -0300)]
ot-main: Ignore lt- prefixes in binary names
libtool is the best
https://bugzilla.gnome.org/show_bug.cgi?id=682438
Colin Walters [Mon, 22 Oct 2012 22:23:42 +0000 (18:23 -0400)]
admin: Add new pull-deploy command
Fetch the latest for the current tree, and deploy it in one go.
Colin Walters [Mon, 22 Oct 2012 22:24:31 +0000 (18:24 -0400)]
libgsystem: Update
Matthias Clasen [Sun, 30 Sep 2012 16:18:50 +0000 (12:18 -0400)]
Make ostree admin --help output more useful
At a minimum, it should list the available subcommands. This is
still not perfect, since there is no way to get at the help output
of the subcommands - getting that right needs more refactoring.
Signed-off-by: Colin Walters <walters@verbum.org>
Colin Walters [Thu, 18 Oct 2012 00:54:52 +0000 (20:54 -0400)]
core: quiet a compiler warning
Colin Walters [Sat, 13 Oct 2012 14:30:19 +0000 (10:30 -0400)]
core: Check out files before directories
Otherwise we pretty easily hit maximum FD limits =(
Colin Walters [Mon, 15 Oct 2012 22:35:54 +0000 (18:35 -0400)]
core: Ensure correct file data is synced in non-overwrite case
Colin Walters [Mon, 15 Oct 2012 14:44:20 +0000 (10:44 -0400)]
core: Use linkat() rather than link() in threaded checkouts
This seems to work around a likely Linux kernel VFS bug, where I
randomly see ENOENT on link() when we *definitely* called mkdir() at
an earlier point in time.
Colin Walters [Mon, 15 Oct 2012 14:42:18 +0000 (10:42 -0400)]
core: And one more race in multithreaded mkdir -p
Sigh =(
Colin Walters [Sun, 14 Oct 2012 21:18:05 +0000 (17:18 -0400)]
core: Fix devino speedup for archive-z
Colin Walters [Sat, 13 Oct 2012 23:55:16 +0000 (19:55 -0400)]
core: Rework archive-z mode to have header be uncompressed
This is an incompatible change to archive-z, thus it is now renamed to
archive-z2 and ostree will no longer parse archive-z.
I noticed in perf that we were spending some time zlib-decompressing
file headers, which is just inefficient. Rather than do this, keep
the headers uncompressed, and just zlib-compress content.
Colin Walters [Sun, 14 Oct 2012 19:34:33 +0000 (15:34 -0400)]
core: Call fdatasync() before we rename()
Just noticed this from strace, doesn't really matter, but looks nicer.
Colin Walters [Sat, 13 Oct 2012 23:22:29 +0000 (19:22 -0400)]
checkout: Drop uncompressed object GC for now
It's racy when multiple processes are involved, and needs a bit more
thought.
Colin Walters [Sat, 13 Oct 2012 22:41:47 +0000 (18:41 -0400)]
core: Fix case where we hardlinked successfully but thought we didn't
We need to return hardlink_supported even if we had to do an unlink
first.
Colin Walters [Sat, 13 Oct 2012 22:01:19 +0000 (18:01 -0400)]
core: A few more error-prefixings
Colin Walters [Sat, 13 Oct 2012 21:54:19 +0000 (17:54 -0400)]
core: One more minor tweak to recursive directory creation
We would fail in the case where we were trying to create a
subdirectory of /; this didn't actually happen, just noticed
via code inspection.
Colin Walters [Sat, 13 Oct 2012 21:46:24 +0000 (17:46 -0400)]
core: Prefix some error messages
To help debug why I still have this race condition...
Colin Walters [Fri, 12 Oct 2012 21:44:02 +0000 (17:44 -0400)]
core: Threadsafe recursive direction creation is harder than it appears
Colin Walters [Fri, 12 Oct 2012 19:25:25 +0000 (15:25 -0400)]
core: Fix regression in previous commit
Colin Walters [Fri, 12 Oct 2012 19:10:39 +0000 (15:10 -0400)]
core: Make mkdir -p function safer
Recursing here is just a more obvious way to do it, rather than
relying on the semantics of g_file_make_directory_with_parents().
Colin Walters [Fri, 12 Oct 2012 17:09:10 +0000 (13:09 -0400)]
core: Ensure file data is synced to disk when checking out via non-hardlinks
Otherwise we aren't crash-safe.
Colin Walters [Fri, 12 Oct 2012 15:24:06 +0000 (11:24 -0400)]
repo: Avoid race condition in threaded checkout with symbolic links
We were inconsistently putting symbolic links into the uncompressed
object cache, which could cause the threaded checkout to get confused.
Colin Walters [Thu, 11 Oct 2012 22:33:03 +0000 (18:33 -0400)]
core: Add dynamic uncompressed object cache for archive-z
This gives us something closer to the advantages of archive and
archive-z when using the latter. Concretely we get deduplication
among multiple checkouts, along with the "devino" hash table trick
during commits to avoid checksumming content again.
This is enabled by default.
Colin Walters [Fri, 5 Oct 2012 21:20:40 +0000 (17:20 -0400)]
pull: Print elapsed time
Colin Walters [Fri, 5 Oct 2012 21:12:39 +0000 (17:12 -0400)]
core: Only do devino scan on commit (speeds up pull)
When fetching data remotely, there's no point to the devino scan
because we're not going to be committing local files.
Only do it for "commit".
Colin Walters [Fri, 5 Oct 2012 00:32:14 +0000 (20:32 -0400)]
pull: Ensure worker queue finishes if we unhold an empty queue too
Colin Walters [Fri, 5 Oct 2012 00:00:00 +0000 (20:00 -0400)]
pull: Stage content asynchronously
For similar reasons as metadata, this avoids having the main thread
blocked in fdatasync(), and even better - we can achieve much higher
parallelism if we have multiple threads blocked on fdatasync().
Colin Walters [Thu, 4 Oct 2012 22:24:37 +0000 (18:24 -0400)]
pull: Stage metadata objects asynchronously
This avoids the main thread being blocked on fdatasync(); also as a
bonus we checksum metadata in a separate thread too.
Colin Walters [Thu, 4 Oct 2012 22:23:18 +0000 (18:23 -0400)]
pull: Ensure queued filemeta requests don't starve everything else
We need this hack for "archive mode" repositories; otherwise,
what ends up happening is that we get 10000+ requests pending
for .filemeta files, which we can't process until we also get
the .filecontent.
Note this hack is unneccessary when fetching from archive-z
repositories.
Colin Walters [Thu, 4 Oct 2012 19:29:39 +0000 (15:29 -0400)]
pull: Merge metadata and content fetch phases
This is a notable speedup when the metadata scanner is working, and we
don't have a lot of traffic; we can pull down data at the same time.
Colin Walters [Tue, 28 Aug 2012 13:41:09 +0000 (09:41 -0400)]
pull: Asynchronous metadata fetch
Create a worker thread for processing metadata, reserving the main
thread for HTTP requests.
This can create a very significant efficiency win for large pull
requests since we are much more likely to keep a full pipeline open.
The status display is also nicer now.
Colin Walters [Mon, 1 Oct 2012 23:34:25 +0000 (19:34 -0400)]
admin: Install grub2 config file if we detect /etc/grub.d
Decouple this from the kernel postinst one, since it's possible to
have one but not the other.
Colin Walters [Mon, 1 Oct 2012 14:25:36 +0000 (10:25 -0400)]
admin: Prepare /var/log/dracut.log when creating initramfs
Otherwise dracut complains.
Colin Walters [Tue, 25 Sep 2012 23:24:14 +0000 (19:24 -0400)]
Release 2012.11
Colin Walters [Wed, 26 Sep 2012 02:24:29 +0000 (22:24 -0400)]
Update libgsystem
This ensures we're disting the README, which makes the autogen.sh do
the right thing.
Colin Walters [Tue, 25 Sep 2012 23:13:05 +0000 (19:13 -0400)]
build: Add one header file missing from dist
Colin Walters [Tue, 25 Sep 2012 22:44:08 +0000 (18:44 -0400)]
build: Add autogen.sh, the COPYING.{GPL,LGPL} files to EXTRA_DIST
We want them in tarballs too.
Colin Walters [Tue, 25 Sep 2012 02:21:25 +0000 (22:21 -0400)]
Release 2012.10
Colin Walters [Tue, 25 Sep 2012 22:07:46 +0000 (18:07 -0400)]
packages: Two spec file fixes
Colin Walters [Tue, 25 Sep 2012 02:20:36 +0000 (22:20 -0400)]
autogen: Only do submodule update if we don't have libgsystem
Otherwise we'll fail due to not being a git repository in the
embedded-dependency tarball case.
Colin Walters [Mon, 24 Sep 2012 12:30:07 +0000 (08:30 -0400)]
autogen.sh: Use set -e
Otherwise we blindly continue if autoreconf fails, which is pretty
damn lame.
Colin Walters [Mon, 24 Sep 2012 11:36:42 +0000 (07:36 -0400)]
core: use open(..., O_NOATIME) for reading loose objects
More efficient, and atime shouldn't matter for these.
Colin Walters [Sun, 23 Sep 2012 23:25:09 +0000 (19:25 -0400)]
Add tests missing from previous commit
Colin Walters [Sat, 15 Sep 2012 16:44:57 +0000 (12:44 -0400)]
Add an archive-z repository mode
This is where loose content objects are stored as one compressed file,
instead of the two separate ones for regular archive mode. This mode
would be suitable for HTTP servers, beause only one HTTP request is
necessary, and the result would be compressed.
Colin Walters [Sun, 23 Sep 2012 21:32:11 +0000 (17:32 -0400)]
pull: Fix two minor memory leaks
Colin Walters [Sun, 23 Sep 2012 20:44:12 +0000 (16:44 -0400)]
core: Clean up staging API and internals
Cleanly separate metadata/content APIs, rather than defaulting to
raw streams. This helps most use cases.
Also, drop support for staging content without knowing the total
length. This complicated the code, and for things like streaming
HTTP, we should be able to figure this out from Content-Length.
Colin Walters [Sun, 23 Sep 2012 19:16:33 +0000 (15:16 -0400)]
core: Drop packfiles as they are now
They're not a large efficiency win at the moment, because we don't
do any delta compression.
At the moment, they simply served to compress data, but we will change
the archive mode to do that by default.
Colin Walters [Sun, 23 Sep 2012 19:56:28 +0000 (15:56 -0400)]
tests: Drop tests of removed --atomic-retarget option
Colin Walters [Sun, 23 Sep 2012 19:55:02 +0000 (15:55 -0400)]
diff: Fix case when used on native files
Colin Walters [Fri, 21 Sep 2012 00:11:59 +0000 (20:11 -0400)]
packaging: Update spec file per Fedora review
See https://bugzilla.redhat.com/show_bug.cgi?id=819951
Colin Walters [Thu, 20 Sep 2012 22:48:03 +0000 (18:48 -0400)]
packages: Update ostree.spec for file changes
Colin Walters [Thu, 20 Sep 2012 22:00:04 +0000 (18:00 -0400)]
packages: Tweak srpm command
This spec should be usable for both embedded dependencies and not.
Colin Walters [Tue, 18 Sep 2012 12:39:26 +0000 (08:39 -0400)]
admin: Initialize /var more fully
This helps out gnome-ostree, because gdm needs /var/lib for example.
Giovanni Campagna [Fri, 14 Sep 2012 21:57:20 +0000 (23:57 +0200)]
Grub2: use /etc/system-release now that we have one
This matches the upstream code more, and avoids the GNOME OS trademark
in ostree, which is otherwise platform agnostic.
https://bugzilla.gnome.org/show_bug.cgi?id=684049
Giovanni Campagna [Sun, 16 Sep 2012 21:56:13 +0000 (23:56 +0200)]
Add /ostree/current-etc symlink to current configuration
Configuration associated with a specific revision is stored in a folder
named <revision>-etc. In a similar spirit, add /ostree/current-etc, pointing
to the -etc folder for the revision named by current. This allows
easy editing of configuration from the host distribution, and allows
diffing current/etc and current-etc for configuration changes.
https://bugzilla.gnome.org/show_bug.cgi?id=684049
Giovanni Campagna [Fri, 14 Sep 2012 21:58:58 +0000 (23:58 +0200)]
Update kernel files for command naming changes
ostadmin is now ostree admin.
https://bugzilla.gnome.org/show_bug.cgi?id=684049
Colin Walters [Sat, 15 Sep 2012 16:34:04 +0000 (12:34 -0400)]
pull: Check the remote repo type
We can only pull from archive repositories right now. This will also
be useful for adding compressed archives later.
Colin Walters [Sat, 15 Sep 2012 15:20:18 +0000 (11:20 -0400)]
Extract keyfile helpers into libotutil
Will be used by ostree-pull too soon.
Colin Walters [Sun, 9 Sep 2012 15:42:17 +0000 (11:42 -0400)]
ostadmin: Fix up deploy config logic again
Clearly we need tests here...
Colin Walters [Sun, 9 Sep 2012 15:31:22 +0000 (11:31 -0400)]
admin: Ensure we pass options to subcommands
Otherwise ostree admin --ostree-dir=/foo deploy --no-kernel bar
doesn't work.
Colin Walters [Sun, 9 Sep 2012 14:42:13 +0000 (10:42 -0400)]
update-kernel: Fix free -> g_object_unref
Colin Walters [Sat, 8 Sep 2012 22:46:50 +0000 (18:46 -0400)]
Move "ostadmin" => "ostree admin"
This helps us avoid polluting the global binary namespace.
Colin Walters [Fri, 22 Jun 2012 22:41:59 +0000 (18:41 -0400)]
Make /etc a writable mount
First, move deployments to /ostree/deploy. Having them in the
toplevel clutters the filesystem layout too much.
When we deploy a tree like /ostree/deploy/NAME, there is now also a
writable directory /ostree/deploy/NAME-etc. This is mounted as
read-write inside the system.
On an initial install, that directory is copied from
/ostree/deploy/NAME/etc. On subsequent deployments, we find any
changes made in the current deployment's /etc, and apply that set of
changes to the new deployment's /etc.
See https://live.gnome.org/OSTree/EverythingInEtcIsABug
Colin Walters [Mon, 3 Sep 2012 17:43:42 +0000 (10:43 -0700)]
otutil: Add a few more helper functions
To be used by wip/etc-writable branch.
Colin Walters [Fri, 31 Aug 2012 21:49:58 +0000 (14:49 -0700)]
core: Refactor diff to be an internal API
For future use by other code.
Colin Walters [Fri, 31 Aug 2012 00:42:36 +0000 (17:42 -0700)]
ostadmin: Also ensure /ostree/modules exists
We depend on host kernel for now.
Colin Walters [Tue, 28 Aug 2012 14:14:11 +0000 (10:14 -0400)]
build: Add dist-snapshot
Take the current git HEAD and make a tarball from it; should be useful
for putting snapshots into Poky.
Colin Walters [Tue, 28 Aug 2012 13:58:07 +0000 (09:58 -0400)]
Use correct libgsystem
Accidentally pushed a local patch.
Colin Walters [Tue, 28 Aug 2012 13:45:39 +0000 (09:45 -0400)]
Merge remote-tracking branch 'aperezdc/fixes'
Adrian Perez [Tue, 28 Aug 2012 13:36:07 +0000 (16:36 +0300)]
configure.ac: Fix checks for libarchive
When configuring without passing --enable-triggers-only, checks for
libarchive were not being done. Shuffling around the checks solves
the issue.
Colin Walters [Mon, 27 Aug 2012 22:48:14 +0000 (18:48 -0400)]
Update libgsystem
Colin Walters [Mon, 27 Aug 2012 20:07:39 +0000 (16:07 -0400)]
core: Use O_NOATIME to open metadata
We really don't need atime for metadata, it's just a speed hit.
Colin Walters [Mon, 27 Aug 2012 15:53:06 +0000 (11:53 -0400)]
repo: Call fdatasync() before adding objects to the repo
I run builds on my laptop, but it also crashes about 1/4 of the time
while suspending. It's definitely undesrirable to get e.g. empty
.dirtree objects because they corrupt builds. Concretely, I was
getting empty contents committed for xorg-util-macros.
Now, we used to write out temporary files using g_file_replace() which
does a fsync() during close, but then switched to a more "manual"
g_file_append_to().
We could switch back to g_file_replace(), but the problem is, we don't
want to call fsync() on temporary files in the case where we already
have the object. Attempting to add an object we already have is a
*very* common case.
This is both the old and new code sequence for the case where an
object is already stored:
open(temp, O_WRONLY)
write() write() write()
close()
lstat(objects/3a/9fe332...) = 0
unlink(temp)
In the *new* code, here's the case where an object *isn't* stored:
open(temp, O_WRONLY)
write() write() write()
close()
lstat(objects/3a/9fe332...) = -1
open(temp, O_RDONLY)
fdatasync()
close()
rename(temp, objects/3a/9fe332)
Compare with the *old* code path for when an object isn't stored:
open(temp, O_WRONLY)
write() write() write()
close()
lstat(objects/3a/9fe332...) = -1
link(temp, objects/3a/9fe332)
unlink(temp)
The problem with this is we really need to fdatasync(). Also doing
just rename() instead of the weird link()/unlink() helps us express to
the filesystem that we want atomic semantics. For example, BTRFS has
special handling for rename().
Colin Walters [Mon, 27 Aug 2012 15:39:44 +0000 (11:39 -0400)]
traverse: Set an explicit error when loading a corrupted commit
I had a empty files for a .commit and .dirmeta, and previously we were
segfaulting.
Colin Walters [Thu, 23 Aug 2012 14:45:59 +0000 (10:45 -0400)]
ostadmin: Cosmetic change for option defaults
Colin Walters [Thu, 23 Aug 2012 14:45:23 +0000 (10:45 -0400)]
ostadmin: Add --ostree-dir option to init
Matches the option for deploy.
Colin Walters [Sun, 26 Aug 2012 20:35:44 +0000 (16:35 -0400)]
repo: Ensure all stored files are readable
We really don't have a sane story for private files. This is a
defensive step ensuring that with old versions of gnome-ostree,
components that mistakenly have un-world-readable files don't break
pulls.
Colin Walters [Sun, 26 Aug 2012 15:43:09 +0000 (11:43 -0400)]
Release 2012.9
Colin Walters [Sun, 26 Aug 2012 16:46:14 +0000 (12:46 -0400)]
build: Add --enable-triggers-only
For bootstrapping gnome-ostree, we need to install the triggers early
on, before we actually build the real ostree binary.
Colin Walters [Sat, 25 Aug 2012 19:55:43 +0000 (15:55 -0400)]
prune: Don't fail if an object isn't found
We expect most people to have partial repositories.
Colin Walters [Sat, 25 Aug 2012 19:50:19 +0000 (15:50 -0400)]
repo: Also traverse remote refs when enumerating objects
Otherwise ostree --repo=repo prune will delete everything =/